import { apiClient } from 'axiom-view';

export const fileStorageApi = {
  // 获取文件树结构
  getTree(params) {
    return apiClient.get('/storage/tree', { params });
  },
  // 获取指定目录下的文件和文件夹列表
  getItems(params) {
    return apiClient.get('/storage/list', { params });
  },
  // 删除指定文件或文件夹
  delete(itemId) {
    return apiClient.delete(`/storage/${itemId}`);
  },
  // 创建新文件夹
  createFolder(data) {
    return apiClient.post('/storage/folder', data);
  },
  // 上传文件（FormData 格式，Axios 会自动设置 Content-Type）
  upload(data) {
    return apiClient.post('/storage/upload', data);
  },
  // 重命名文件或文件夹
  rename(itemId, newName) {
    return apiClient.put(`/storage/${itemId}/rename`, { new_name: newName });
  },
  // 移动文件或文件夹到目标父目录
  move(itemIds, targetParentId) {
    return apiClient.put('/storage/move', { item_ids: itemIds, target_parent_id: targetParentId });
  },
  // 下载文件，兼容本地存储和 S3 存储
  async download(fileId) {
    try {
      // 本地文件：直接返回二进制数据（blob）
      const responseBlob = await apiClient.get(`/storage/download/${fileId}`, {
        responseType: 'blob',
        // 期望重定向失败以便捕获（S3 场景）
        maxRedirects: 0, 
      });
      // 由于 apiClient 封装，无法直接获取 headers
      return { type: 'blob', data: responseBlob };
    } catch (error) {
      // S3 文件：后端返回 302 跳转，Axios 视为错误
      if (error.response && error.response.status === 302) {
        // 预签名下载链接在 location 响应头中
        // 注意：服务端需暴露 Location 响应头以通过 CORS
        const downloadUrl = error.response.headers.location;
        if (downloadUrl) {
          return { type: 'url', data: downloadUrl };
        } else {
          throw new Error('未找到 S3 文件的重定向下载地址。');
        }
      }
      // 其他异常直接抛出
      throw error;
    }
  }
}; 